import json
from typing import List, Dict, Any

def json_to_md_table(json_array: List[Dict[str, Any]]) -> str:
    """
    将 JSON 数组转换为 Markdown 表格格式文本。
    方法说明：
    - 自动获取 JSON 数组中所有对象的所有键作为列头，适应字段名称可能会变化的情况。
    - 如果字段值为字典或列表，将会转换为 JSON 格式字符串。
    - 对字符串中的换行符进行替换（转换为 <br>），并转义管道符 | 以免破坏 Markdown 格式。
    """
    # 收集所有可能出现的列（键）
    columns = set()
    for item in json_array:
        columns.update(item.keys())
    columns = sorted(list(columns))
    
    # 构造 Markdown 表格的头部和分隔行
    header = "| " + " | ".join(columns) + " |"
    separator = "| " + " | ".join(["---"] * len(columns)) + " |"
    
    rows = []
    for item in json_array:
        row_cells = []
        for col in columns:
            value = item.get(col, "")
            # 如果值是 dict 或 list，则转换为 JSON 格式字符串
            if isinstance(value, (dict, list)):
                value = json.dumps(value, ensure_ascii=False)
            # 如果值为字符串，则替换换行符和转义 |
            if isinstance(value, str):
                value = value.replace("\n", "<br>").replace("|", "\\|")
            row_cells.append(str(value))
        row = "| " + " | ".join(row_cells) + " |"
        rows.append(row)
    
    # 组合成完整的 Markdown 表格文本
    md_table = "\n".join([header, separator] + rows)
    return md_table

# 示例使用：
if __name__ == "__main__":
    sample_json = '''[
  {
    "维度代码": "DisDate",
    "维度描述": "出院日期",
    "关联码表": "dwbc.CT_DIMDAY",
    "theme": "收入主题"
  },
  {
    "维度代码": "FlagDate",
    "维度描述": "结算日期",
    "关联码表": "dwbc.CT_DIMDAY",
    "theme": "收入主题"
  },
  {
    "维度代码": "OrdDate",
    "维度描述": "计费日期",
    "关联码表": "dwbc.CT_DIMDAY",
    "theme": "收入主题"
  },
  {
    "维度代码": "AccountDate",
    "维度描述": "核算日期",
    "关联码表": "dwbc.CT_DIMDAY",
    "theme": "收入主题"
  }]'''
    
    # json.dumps(results['records'], ensure_ascii=False, indent=2)
    data = json.loads(sample_json)
    md_table = json_to_md_table(data)
    print(md_table)
